Tool Use 使用指南
概述
Tool Use功能允许智能体在训练过程中调用外部工具来增强推理能力。
ROLL中环境接口使用GEM环境定义,Tool Use使用GEM提供的Tool Env Wrapper。Tool基于gem.tools.base_tool.BaseTool接口扩展。
核心组件
- BaseTool接口(
gem.tools.base_tool.BaseTool): 所有tool必须继承的基础接口 - Tool Env Wrapper(
roll.pipeline.agentic.tools.tool_env_wrapper.ToolEnvWrapper): 为环境添加tool调用能力的包装器 - Tool注册机制 (
roll/pipeline/agentic/tools/__init__.py): 统一管理和注册可用tool
默认支持的Tool类型
当前ROLL默认支持以下三种tool:
PythonCodeTool
- 功能:执行Python代码
- 用途:数学计算、数据处理、算法实现等
- 实现位于:
roll/pipeline/agentic/tools/python_code_tool.py
class PythonCodeTool(GEMPythonCodeTool):
def __init__(
self,
timeout: int = 5,
sandbox_type: str = "none",
keep_error_last_line: bool = False,
tool_instruction=None,
patterns=None,
):
pass
SearchTool
- 功能:搜索外部信息
- 用途:问答系统、知识检索、事实验证等
- 实现位于:
gem.tools.search_tool.SearchTool
class SearchTool(BaseTool):
def __init__(self, num_workers=1, search_url=None, topk=3, timeout=TIMEOUT):
pass
McpTool
- 功能:模型上下文协议工具
- 用途:与外部模型或服务交互
- 实现位于:
roll.pipeline.agentic.tools.mcp_tool.MCPTool
class MCPTool(BaseTool):
def __init__(self,
num_workers=1,
server_url: Optional[str] = None,
client: Optional[MCPClient] = None,
tool_names_subset: Optional[List[str]] = None,
custom_prompt: Optional[str] = None):
pass
Tool注册和自定义扩展
Tool的注册位于roll/pipeline/agentic/tools/__init__.py,用户可以根据需要自定义扩展tool实现,并使用register_tools注册。
自定义Tool示例
from gem.tools.base_tool import BaseTool
class MyCustomTool(BaseTool):
"""自定义tool示例"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
def execute(self, input_data):
# 实现tool的具体逻辑
return {"result": "custom tool output"}
Tool Wrapper配置和使用
ROLL中tool wrapper的代码位于roll/pipeline/agentic/env_manager/traj_env_manager.py:73,用户自定义env_manager时,加上wrapper即可为env增加tool call能力。
YAML配置示例
通过yaml文件配置env使用的tool_wrapper,示例如下(examples/config/traj_envs_gem_math.yaml):
dapo_17k_with_python_code:
env_type: "roll_math"
max_steps: ${max_actions_per_traj}
max_tokens_per_step: ${max_tokens_per_step}
env_manager_cls: ${env_manager_cls}
agent_system_template: ${math_agent_system_template}
agent_template: ${math_agent_template}
env_config:
max_steps: ${max_actions_per_traj}
dataset_name: open-r1/DAPO-Math-17k-Processed
question_key: prompt
answer_key: solution
tool_wrapper:
wrapper_args:
tool_reward: 0
tool_success_reward: 0
max_tool_uses: 1
tool_configs:
- tool_id: python_code
tool_args:
timeout: 5
sandbox_type: none
keep_error_last_line: false